home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / src / fig08_08.jar / Ch08 / Fig08_08 / Hugeint1.cpp < prev    next >
C/C++ Source or Header  |  1997-10-25  |  2KB  |  76 lines

  1. // Fig. 8.8: hugeint1.cpp 
  2. // Member and friend function definitions for class HugeInt
  3. #include <string.h>
  4. #include "hugeint1.h"
  5.  
  6. // Conversion constructor
  7. HugeInt::HugeInt( long val )
  8. {
  9.    int i; 
  10.  
  11.    for ( i = 0; i <= 29; i++ )
  12.       integer[ i ] = 0;   // initialize array to zero
  13.  
  14.    for ( i = 29; val != 0 && i >= 0; i-- ) {
  15.       integer[ i ] = val % 10;
  16.       val /= 10;
  17.    }
  18. }
  19.  
  20. HugeInt::HugeInt( const char *string )
  21. {
  22.    int i, j;
  23.  
  24.    for ( i = 0; i <= 29; i++ )
  25.       integer[ i ] = 0;
  26.  
  27.    for ( i = 30 - strlen( string ), j = 0; i <= 29; i++, j++ )
  28.       integer[ i ] = string[ j ] - '0';
  29. }
  30.  
  31. // Addition
  32. HugeInt HugeInt::operator+( HugeInt &op2 )
  33. {
  34.    HugeInt temp;
  35.    int carry = 0;
  36.  
  37.    for ( int i = 29; i >= 0; i-- ) {
  38.       temp.integer[ i ] = integer[ i ] + 
  39.                           op2.integer[ i ] + carry;
  40.  
  41.       if ( temp.integer[ i ] > 9 ) {
  42.          temp.integer[ i ] %= 10;
  43.          carry = 1;
  44.       }
  45.       else
  46.          carry = 0;
  47.    }
  48.  
  49.    return temp;
  50. }
  51.  
  52. // Addition
  53. HugeInt HugeInt::operator+( int op2 )
  54.    { return *this + HugeInt( op2 ); }
  55.  
  56. // Addition
  57. HugeInt HugeInt::operator+( const char *op2 )
  58.    { return *this + HugeInt( op2 ); }
  59.  
  60. ostream& operator<<( ostream &output, HugeInt &num )
  61. {
  62.    int i;
  63.  
  64.    for ( i = 0; ( num.integer[ i ] == 0 ) && ( i <= 29 ); i++ )
  65.       ; // skip leading zeros
  66.  
  67.    if ( i == 30 )
  68.       output << 0;
  69.    else
  70.       for ( ; i <= 29; i++ )
  71.          output << num.integer[ i ];
  72.  
  73.    return output;
  74. }
  75.  
  76.